package org.agile4j.activemq.java;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * 点对点的消息模型以及发送的一个同步消息
 * 消息的生产者(发送至)
 * Created by Administrator on 2016/7/15.
 */
public class JMSProducer {
    //默认连接用户名
    private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
    //默认连接密码
    private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
    //默认连接地址
    private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;
    //发送的消息数量
    private static final int SENDNUM = 10;

    public static void main(String[] args) {
        // 连接工程
        ConnectionFactory connectionFactory;
        // 连接
        Connection connection = null;
        // 会话 接受或者发送消息的线程
        Session session;
        // 消息的目的地
        Destination destination ;
        // 消息生产者
        MessageProducer messageProducer ;
        // 实例化连接工程
        connectionFactory = new ActiveMQConnectionFactory(JMSProducer.USERNAME, JMSProducer.PASSWORD, JMSProducer.BROKEURL) ;

        try {
            //通过连接工厂获取连接
            connection = connectionFactory.createConnection() ;
            // 启动连接
            connection.start();
            // 创建session
            session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE) ;
            // 创建一个名为"HelloWorld"的消息队列
            destination = session.createQueue("HelloWorld") ;
            // 创建消息生产者
            messageProducer = session.createProducer(destination) ;
            // 发送消息
            sendMessage(session, messageProducer) ;

            session.commit(); // 没有这个啥都白扯
        }catch (Exception e) {
            e.printStackTrace();
        }finally{
            if(connection != null){
                try {
                    connection.close();
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 发送消息
     * @param session
     * @param messageProducer  消息生产者
     * @throws Exception
     */
    private static void sendMessage(Session session, MessageProducer messageProducer) throws Exception{
        for (int i = 0; i < JMSProducer.SENDNUM; i ++) {
            // 创建一个文本消息
            TextMessage message = session.createTextMessage("ActiveMQ 发送消息: " + i) ;
            System.out.println("发送消息：Activemq 发送消息:" + i);
            messageProducer.send(message);
        }
    }

}
